package top.glkj.hms.service;

import org.springframework.security.core.userdetails.UserDetailsService;
import top.glkj.hms.entity.*;
import top.glkj.hms.exception.DefineException;
import top.glkj.hms.utils.Result;

import java.util.List;
import java.util.Map;

/**
 * @author : xgl
 * @version : 0.0.1
 * @date :2020/11/11 2:37
 */
public interface UserService extends BaseService<User>, UserDetailsService {
    /**
     * 分页查询
     *
     * @param page 当前页码
     * @param size 页面大小
     * @return page User
     */
    Result getAllUserByPageAndSize(int page, int size);

    /**
     * 分页条件查询
     *
     * @param page    当前页码
     * @param size    页面大小
     * @param argName 参数名
     * @param value   参数值
     * @return page User
     */
    Result getAllUserByPageAndSizeAndArgs(int page, int size, String argName, String value);

    /**
     * 分页查询
     *
     * @param page 当前页码
     * @param size 页面大小
     * @param args 参数键值对
     * @return page User
     */
    Result getAllUserByPageAndSizeAndAnyArgs(int page, int size, Map<String, String> args);

    /**
     * 根据用户获取用户的资源
     *
     * @param user 用户
     * @return 资源
     */
    public Result getAllResourceByUser(User user);

    /**
     * 保存用户角色
     *
     * @param user  用户
     * @param roles 角色列表
     * @return 执行结果
     */
    public Result saveUserRoles(User user, List<Role> roles);

    /**
     * 添加新用户
     *
     * @param user 用户
     * @return true or false
     */
    public Result addUser(User user);

    /**
     * 修改密码
     *
     * @param id          用户id
     * @param password    用户旧密码
     * @param newPassWord 用户新密码
     * @param code        验证码
     * @return 修改结果
     */
    public Result updatePassWord(Long id, String password, String newPassWord, String code);

    /**
     * 修改密码
     *
     * @param id          用户id
     * @param newPassWord 用户新密码
     * @return 修改结果
     */
    public Result updatePassWord(Long id, String newPassWord);

    /**
     * 修改密码
     *
     * @param ids         用户id
     * @param newPassWord 用户新密码
     * @return 修改结果
     * @throws DefineException 异常
     */
    public Result updateAllPassWord(List<Long> ids, String newPassWord) throws DefineException;

    /**
     * 根据参数名修改用户
     *
     * @param user   用户信息
     * @param fields 参数名
     * @return
     */
    public Result updateUser(User user, List<String> fields);

    /**
     * 新增角色
     *
     * @param uid  用户id
     * @param rids 角色id列表
     * @return 修改结果
     * @throws DefineException e
     */
    public Result userAddRole(Long uid, List<Long> rids) throws DefineException;

    /**
     * 修改或移除角色
     *
     * @param uid  用户id
     * @param rids 角色id列表
     * @return 修改结果
     * @throws DefineException e
     */
    public Result userUpdateRole(Long uid, List<Long> rids) throws DefineException;

    /**
     * 获取新注册的用户
     * @return 结果
     */
    public int getCountNewUser();

    /**
     * 用户添加用户详情
     * @param user 用户信息
     * @param userDetail 用户详情
     * @return 结果
     */
    public Result userAddUserDetail(User user, UserDetail userDetail);

    /**
     * 用户更新用户详情
     * @param user 用户信息
     * @param userDetail 用户详情
     * @return
     */
    public Result userUpdateUserDetail(User user,UserDetail userDetail);

    /**
     * 查询vip 用户
     * @param user 用户信息
     * @return 用户详情
     */
    public Result getVipUserByUser(User user);

    /**
     * 查询vip 用户
     * @return vip 用户
     */
    public Result getAllVipUser();

    /**
     * 分页获取所有vip
     * @return vip 用户
     * @param page
     * @param size
     */
    public Result getAllVipUserByPageAndSize(int page,int size);

    /**
     * 添加vip
     * @param vipUser vip 用户
     * @return vip 用户
     */
    public Result addVipUser(VipUser vipUser);
    /**
     * 修改vip
     * @param vipUser vip 用户
     * @return vip 用户
     */
    public Result updateVipUser(VipUser vipUser);
    /**
     * 删除vip
     * @param vipUser vip 用户
     * @return vip 用户
     */
    @Deprecated
    public Result deleteVipUser(VipUser vipUser);
    /**
     * 移除vip
     * @param vipUser vip 用户
     * @return vip 用户
     */
    public Result removeVipUser(VipUser vipUser);

    /**
     * 查询Employee 用户
     * @param user 用户信息
     * @return 用户详情
     */
    public Result getEmployeeByUser(User user);

    /**
     * 查询Employee 用户
     * @return Employee 用户
     */
    public Result getAllEmployeeUser();

    /**
     * 分页获取所有Employee
     * @return Employee 用户
     * @param page
     * @param size
     */
    public Result getAllEmployeeUserByPageAndSize(int page,int size);

    /**
     * 添加Employee
     * @param employee Employee 用户
     * @return Employee 用户
     */
    public Result addEmployee(Employee employee);
    /**
     * 修改Employee
     * @param employee Employee 用户
     * @return Employee 用户
     */
    public Result updateEmployee(Employee employee);
    /**
     * 删除Employee
     * @param employee Employee 用户
     * @return Employee 用户
     */
    @Deprecated
    public Result deleteEmployee(Employee employee);
    /**
     * 移除Employee
     * @param employee Employee 用户
     * @return Employee 用户
     */
    public Result removeEmployee(Employee employee);
}
